//
//  HMTabBar.swift
//  Weibo12
//
//  Created by HM on 15/12/26.
//  Copyright © 2015年 itheima. All rights reserved.
//

import UIKit

class HMTabBar: UITabBar {
    
    // 撰写按钮点击要执行的闭包
    var composeButtonClickClourse: (() -> ())?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    // 代表当前控件只能通过代码的形式创建
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupUI()
    }
    
    private func setupUI(){
        addSubview(composeButton)
        backgroundImage = UIImage(named: "tabbar_background")
    }
    
    /// 布局子控件
    override func layoutSubviews() {
        super.layoutSubviews()
        // 调整按钮的位置
        // 子控件的 center 值一定不能依靠于父控件的center
        // 因为你不知道父控件是添加到哪儿的
        composeButton.center.y = bounds.size.height * 0.5
        composeButton.center.x = bounds.size.width * 0.5
        
        // 调整底部其他4个按钮的宽度
        
        // 计算宽度
        let childW = bounds.size.width * 0.2
        
        var index = 0
        
        // 遍历子控件
        for value in subviews {
            // 判断当前子控件是UITabBarButton
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!) {
                // 设置宽度
                value.frame.size.width = childW
                value.frame.origin.x = CGFloat(index) * childW
                
                // 脚标递增
                index++
                
                // 如果当前 index 是 2 的话（如果是发现按钮的话，往后移一个）
                if index == 2 {
                    index++
                }
            }
        }
    }
    
    // MARK: - 监听事件
    // [Weibo12.HMTabBar composeButtonClick]: unrecognized selector sent to instance 0x7f99b0d8f960
    // 在 tabBar 身上找不到 composeButtonClick 这个方法
    
    // 在 Swift 中，如果用 private 修饰的方法，在运行的时候，运行循环是找不到这个方法的
    // Swift 是静态语言，按钮要执行的方法，不会在运行的时候去决定，在编译的时候，就决定这个方法是否可找到
    @objc private func composeButtonClick(){
        composeButtonClickClourse?()
    }

    
    // MARK: - 懒加载控件
    // private 是私有，如果不想把某些属性或者方法暴露给外界，那么就可以使用其修饰
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        
        // 监听按钮点击
        button.addTarget(self, action: "composeButtonClick", forControlEvents: .TouchUpInside)
        
        // 设置不同状态的背景
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        // 设置不同状态的图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        // 根据内容调整自身的大小
        button.sizeToFit()
        return button
    }()

}
